package com.common.handler;
/**
 * Redis键处理类，用于定义和管理用户相关数据的Redis键
 * 该类提供了一系列常量，作为用户相关数据在Redis中的键前缀
 * 通过这些前缀，可以方便地构造和识别用户数据的键名
 */
public class RedisKeysHandler {
    /**
     * 分片集群下使用 user 类型key的有效计算部分 确保user类型的key都在同一台master上
     */
    public static final String USER_KEY_PREFIX = "{user}";

    public static final String COURSE_KEY_PREFIX = "{course}";

    /**
     * 登入手机号验证码
     */
    public static final String LOGIN_PHONE_CODE_KEY = "user:login:phone:code:";
    public static String getLoginPhoneCodeKey(String phone){
        return LOGIN_PHONE_CODE_KEY + phone;
    }

    /**
     * 校验手机号验证码 （绑定 + 换绑）
     */
    public static final String VALIDATE_PHONE_CODE_KEY = "user:validate:phone:code:";
    public static String getValidatePhoneCodeKey(String phone){
        return VALIDATE_PHONE_CODE_KEY + phone;
    }

    /**
     * 校验邮箱验证码（绑定 + 换绑）
     */
    public static final String VALIDATE_EMAIL_CODE_KEY = "user:validate:email:code:";
    public static String getValidateEmailCodeKey(String email){
        return VALIDATE_EMAIL_CODE_KEY + email;
    }

    /**
     * token：存储每一个用户的登入token 确保同一账号只能在一处进行登入
     *      存在：表示已经登入
     *      不存在：表示未登入
     */
    public static final String TOKEN_LOGIN_KEY = "user:token:";
    public static String getTokenKey(Long userId){
        return TOKEN_LOGIN_KEY + userId;
    }

    /**
     * token：存储每一个用户的刷新token 确保同一账号只能在一处进行登入
     *      存在：表示已经登入
     *      不存在：表示未登入
     */
    public static final String TOKEN_LOGIN_REFRESH_KEY = "user:token:refresh";
    public static String getTokenRefreshKey(Long id) {
        return TOKEN_LOGIN_REFRESH_KEY + id;
    }

    /**
     * 用户权限：存储当前用户拥有的所有权限字符串
     */
    public static final String USER_AUTHORITY_KEY = "user:authority:";
    public static String getUserAuthorityKey(String username){
        return USER_AUTHORITY_KEY + username;
    }


    /**
     * 课程详情前缀：存储课程详情信息
     */
    public static final String COURSE_DETAILS_KEY = "course:details:";
    public static String getCourseDetailsKey(Long courseId){
        return COURSE_DETAILS_KEY + courseId;
    }

    /**
     * 分布式锁 课程报名使用：课程报名时，使用分布式锁控制并发，避免重复报名
     */
    public static final String LOCK_COURSE_SIGN_UP_KEY = "lock:course:sign_up:";
    public static String getLockCourseSignUpKey(Long courseId){
        return LOCK_COURSE_SIGN_UP_KEY + courseId;
    }

    /**
     * 课程点赞记录列表：存储当前课程点赞的所有用户id
     */
    public static final String COURSE_LIKE_LIST_KEY = "course:like:";
    public static String getCourseLikeListKey(Long courseId){
        return COURSE_LIKE_LIST_KEY + courseId ;
    }

    /**
     * 课程收藏列表：存储收藏了当前课程的用户id
     */
    public static final String COURSE_FAVORITE_LIST_KEY = "course:favorite:";
    public static String getCourseFavoriteListKey(Long courseId){
        return COURSE_FAVORITE_LIST_KEY + courseId ;
    }

    /**
     * 用户收藏列表：存储用户收藏的所有课程id
     */
    public static final String USER_FAVORITE_LIST_KEY = "user:favorite:";
    public static String getUserFavoriteListKey(Long userId){
        return USER_FAVORITE_LIST_KEY + userId;
    }

    /**
     * 评论功能-元数据层：存储评论总数等统计信息
     */
    public static final String COURSE_COMMENT_META_KEY = "course:comment:meta:";
    public static String getCourseCommentMetaKey(Long courseId){
        return COURSE_COMMENT_META_KEY + courseId;
    }

    /**
     * 评论功能-评论数据：每一个评论都使用Hash结构进行存储。
     */
    public static final String COURSE_COMMENT_DATA_KEY = "course:comment:data:";
    public static String getCourseCommentDataKey(Long commentId){
        return COURSE_COMMENT_DATA_KEY + commentId;
    }

    /**
     * 评论功能-一级评论索引: 存储所有的一级评论Key 使用Set结构
     */
    public static final String COURSE_COMMENT_PARENT_INDEX_KEY = "course:comment:par:";
    public static String getCourseCommentParentIndexKey(Long courseId){
        return COURSE_COMMENT_PARENT_INDEX_KEY + courseId;
    }

    /**
     * 评论功能-二级评论索引: 存储每一个一级评论下的二级评论Key 使用Set结构
     */
    public static final String COURSE_COMMENT_CHILD_INDEX_KEY = "course:comment:chi:";
    public static String getCourseCommentChildIndexKey(Long parentId){
        return COURSE_COMMENT_CHILD_INDEX_KEY + parentId;
    }

    /**
     * 评论点赞记录：记录每一个评论的点赞情况
     * Set 结构，存储点赞的用户id
     */
    public static final String COMMENT_LIKE_LIST_KEY = "course:comment:like:";
    public static String getCourseCommentLikeListKey(Long commentId){
        return COMMENT_LIKE_LIST_KEY + commentId;
    }
    /**
     * 学生点赞记录列表：存储当前用户点赞的所有课程
     */
    public static final String USER_LIKE_LIST_KEY = "user:like:";
    public static String getUserLikeListKey(Long userId){
        return USER_LIKE_LIST_KEY + userId ;
    }

    /**
     * 用户关注列表：存储用户关注的所有的用户id
     */
    public static final String USER_FOLLOW_LIST_KEY = "user:follow:";
    public static String getUserFollowListKey(Long userId){
        return USER_FOLLOW_LIST_KEY + userId;
    }

    /**
     * 粉丝列表：存储所有关注了当前用户的用户id
     */
    public static final String USER_FANS_LIST_KEY = "user:fans:";
    public static String getUserFansListKey(Long userId){
        return USER_FANS_LIST_KEY + userId;
    }

    /**
     * 用户收件箱
     */
    public static final String USER_INBOX_KEY = "user:inbox:";
    public static String getUserInboxKey(Long userId){
        return USER_INBOX_KEY + userId;
    }

    /**
     * ai-历史对话信息
     */
    public static final String AI_HISTORY_KEY = "ai:history:";
    public static String getAiHistoryKey(String conversationId){
        return AI_HISTORY_KEY + conversationId;
    }

    /**
     * 生成订单
     */
    public static final String ORDER_KEY = "order:";
    public static String getGenerateOrder(Long userId){
        return ORDER_KEY + userId;
    }


}
